﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using SistemaCenterQuimPost.Reportes; //usado para imprimir la venta.


namespace SistemaCenterQuimPost.UI
{
    public partial class frmVentasDia : SistemaCenterQuimPost.Plantillas.frmPlantillaHijo
    {
        //--------------ATRIBUTOS--------------------------
        
        private DataSet2 centerQuimDs;
        private DataSet2TableAdapters.VentasTableAdapter ventasDa;
        private DataSet2TableAdapters.ProductosxVentaTableAdapter productosxVentasDa;
        private DataSet2TableAdapters.UsuariosTableAdapter usuariosDa;
        DataSet2TableAdapters.PostTableAdapter postTa;
        int fila;
        private DataSet3 clientesDs;
        private DataSet3TableAdapters.ClientesTableAdapter clientesTa;

        //---------------CONSTRUCTORES----------------------
        public frmVentasDia(int ancho, int alto) //frmVentaDia usan tanto Administrador como Cajero. Ambos usan este formulario
        {                                       //con diferentes tamaño. Estos datos se reciben en el contructor.
            InitializeComponent();

            centerQuimDs = new DataSet2();
            ventasDa = new DataSet2TableAdapters.VentasTableAdapter();
            productosxVentasDa = new DataSet2TableAdapters.ProductosxVentaTableAdapter();
            postTa = new DataSet2TableAdapters.PostTableAdapter();
            usuariosDa = new DataSet2TableAdapters.UsuariosTableAdapter();
            clientesDs = new DataSet3();
            clientesTa = new DataSet3TableAdapters.ClientesTableAdapter();

            this.Width = ancho;
            this.Height = alto;
            this.MinimumSize = new System.Drawing.Size(ancho, alto); //Se establece el tamaño máximo y mínimo en pixeles.
            this.MaximumSize = new System.Drawing.Size(ancho, alto);
        }

        //----------------ESTADOS-----------------------------
        
        private void frmVentasDia_Load(object sender, EventArgs e)
        {
            lblError.Visible = false; //Como se trata de un formulario de un estado, se setea este atributo acá.
        }

        //----------------METODOS VARIOS-----------------------

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            procesarBusqueda(); //verififica los diferentes tipo de fill a realizar segun el estado de los combobox
            
            }

        private void procesarBusqueda()
        {
            try
            {
                if (cboTurno.Text != "")
                {
                    if (cboFormaPago.Text != "")
                    {
                        ventasDa.FillTipoyTurno(centerQuimDs.Ventas, cboFormaPago.Text, cboTurno.Text, Convert.ToDateTime(dtpFecha.Value.ToString().Substring(0, 10)));
                    }
                    else
                    {
                        ventasDa.FillByFechayTurno(centerQuimDs.Ventas, Convert.ToDateTime(dtpFecha.Value.ToString().Substring(0, 10)), cboTurno.Text.Substring(0, 1));
                    }
                }
                else
                {
                    if (cboFormaPago.Text != "")
                    {
                        ventasDa.FillByFechayTipo(centerQuimDs.Ventas, cboFormaPago.Text, Convert.ToDateTime(dtpFecha.Value.ToString().Substring(0, 10)));
                    }
                    else
                    {
                        ventasDa.FillByFechaVenta(centerQuimDs.Ventas, Convert.ToDateTime(dtpFecha.Value.ToString().Substring(0, 10)));
                    }
                }

                if (centerQuimDs.Ventas.Rows.Count == 0)
                {
                    MessageBox.Show("No existen ventas para la fecha y el turno solicitado", "VENTAS DEL DIA", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    fila = 0;
                    cargarEncabezado(fila);

                    //cargamos la grilla
                    cargarGrilla();

                    //cargamos los label de abajo

                    cargamosPie(fila);

                    lblError.Visible = false; //se setea esta propiedad acá, por ser un formulario sin estado.
                }
            }
            catch (Exception ex)
            {
                //Por cualquier otra excepcion se informa el error, en este caso es un error grave.
                MessageBox.Show("La conexión a la base de datos no fué exitosa.\n\n Comuniquese con su desarrollador para solucionar el problema.\n\n" + ex.Message, "ERROR GRAVE - ACCESO A BASE DE DATO", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
        }

         private  void cargarEncabezado(int a)
        {
            lblVentaValor.Text = centerQuimDs.Ventas[a].nroVenta.ToString();//numero de venta al label
            usuariosDa.FillByCodigoUsuario(centerQuimDs.Usuarios, centerQuimDs.Ventas[a].codUsuario);//se busca el codigo de usuario relacionado a la búsqueda
            lblNombreCajeroValor.Text = centerQuimDs.Usuarios[0].nombreUsuario; //se indica el nombre del usuario al label
            productosxVentasDa.FillByNroVenta(centerQuimDs.ProductosxVenta, centerQuimDs.Ventas[a].nroVenta);//buscamos los productos
        }

         private void cargarGrilla()
         {
             dgvProductos.Rows.Clear();
             for (int i = 0; i < centerQuimDs.ProductosxVenta.Rows.Count; i++)
             {
                 if (centerQuimDs.ProductosxVenta[i].unidades != 0) //si es un producto por cantidad
                 {
                     dgvProductos.Rows.Add(centerQuimDs.ProductosxVenta[i].codProducto.ToString(), centerQuimDs.ProductosxVenta[i].descripcion.ToString(), centerQuimDs.ProductosxVenta[i].precioUnitario.ToString(), centerQuimDs.ProductosxVenta[i].unidades.ToString(), centerQuimDs.ProductosxVenta[i].descuento.ToString(), centerQuimDs.ProductosxVenta[i].subtotal.ToString());
                 }
                 else //si es un porducto por Kg/Lts
                 {
                     dgvProductos.Rows.Add(centerQuimDs.ProductosxVenta[i].codProducto.ToString(), centerQuimDs.ProductosxVenta[i].descripcion.ToString(), centerQuimDs.ProductosxVenta[i].precioUnitario.ToString(), centerQuimDs.ProductosxVenta[i].kgLts.ToString(), centerQuimDs.ProductosxVenta[i].descuento.ToString(), centerQuimDs.ProductosxVenta[i].subtotal.ToString());
                 }
             }
         }

        private void cargamosPie(int a)
         {
             lblSubTotalValor.Text = centerQuimDs.Ventas[a].subTotalVenta.ToString();
             lblDescuentoValor.Text = centerQuimDs.Ventas[a].importeDescuento.ToString();
             lblTotalValor.Text = centerQuimDs.Ventas[a].totalGeneral.ToString();

         }

        private void btnAtras_Click(object sender, EventArgs e)
        {
            try
            {
                fila -= 1;
                if (fila < 0)
                {
                    fila = 0;
                }
                else
                {
                    cargarEncabezado(fila);
                    cargarGrilla();
                    cargamosPie(fila);

                    lblError.Visible = false; //se setea esta propiedad acá, por ser un formulario sin estado.
                }
            }
            catch (Exception ex)
            {
                //Por cualquier otra excepcion se informa el error, en este caso es un error grave.
                MessageBox.Show("La conexión a la base de datos no fué exitosa.\n\n Comuniquese con su desarrollador para solucionar el problema.\n\n" + ex.Message, "ERROR GRAVE - ACCESO A BASE DE DATO", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
        }

        private void btnAdel_Click(object sender, EventArgs e)
        {
          try
          {
              fila += 1;
              if (fila > centerQuimDs.Ventas.Rows.Count - 1)
              {
                  fila -= 1;
              }
              else
              {
                  cargarEncabezado(fila);
                  cargarGrilla();
                  cargamosPie(fila);

                  lblError.Visible = false; //se setea esta propiedad acá, por ser un formulario sin estado.
              }
          }
          catch (Exception ex)
          {
              //Por cualquier otra excepcion se informa el error, en este caso es un error grave.
              MessageBox.Show("La conexión a la base de datos no fué exitosa.\n\n Comuniquese con su desarrollador para solucionar el problema.\n\n" + ex.Message, "ERROR GRAVE - ACCESO A BASE DE DATO", MessageBoxButtons.OK, MessageBoxIcon.Error);

          }
            
           
        }

        private void btnImprimir_Click(object sender, EventArgs e)
        {
            //Creamos una instancia de un objeto DataTable, y le hacemos que referencie a la tabla en CenterQuimDs.productoXventa
            DataTable unaDataTable = new DataTable();
            unaDataTable = centerQuimDs.ProductosxVenta;

            //creamos una instancia del tipo CrystalReports que habiamos creado y le asignamos a su crvVenta la tabla instanciada y parametros necesarios.
            crVenta unCrVenta = new crVenta();
            unCrVenta.SetDataSource(unaDataTable);

            //buscamos datos del post
            postTa.Fill(centerQuimDs.Post);

            if (centerQuimDs .Ventas [fila ].codCliente == "0")
            {
                unCrVenta.SetParameterValue("unNombre", "Consumidor Final");
                unCrVenta.SetParameterValue("unaDireccion", "");
            } else
            {
                clientesTa.FillByDni(clientesDs.Clientes, centerQuimDs.Ventas[fila].codCliente);
                unCrVenta.SetParameterValue("unNombre", clientesDs .Clientes [0].apellidoyNombre );
                unCrVenta.SetParameterValue("unaDireccion", clientesDs .Clientes [0].direccion );
            }

            unCrVenta.SetParameterValue("postDireccion", centerQuimDs .Post [0].dirección );
            unCrVenta.SetParameterValue("postTelefono", centerQuimDs.Post[0].telefono);
            unCrVenta.SetParameterValue("unaDireccion", "");
            unCrVenta.SetParameterValue("ventaCodValor", "0000"+centerQuimDs.Ventas[fila].nroVenta.ToString());
            unCrVenta.SetParameterValue("fechaValor", centerQuimDs.Ventas[fila].fechaVenta.ToString("d"));
            unCrVenta.SetParameterValue("subtotalValor", centerQuimDs.Ventas[fila].subTotalVenta.ToString());
            unCrVenta.SetParameterValue("descuentoValor", centerQuimDs.Ventas[fila].importeDescuento.ToString());
            unCrVenta.SetParameterValue("totalGeneralValor", centerQuimDs.Ventas[fila].totalGeneral.ToString());

            //creamos una instancia del frmReporteVenta y le asignamos a su CrystalReportViewer el CrystalReports seteado
            frmReporteVenta unFrmReporteVenta = new frmReporteVenta();
            unFrmReporteVenta.crvReporteVenta.ReportSource = unCrVenta;

            //mostramos el frmReporteVenta
            unFrmReporteVenta.ShowDialog();
        }

        }

       

      
}
